#include "blockingQueue.hpp"
#include <queue>
#include <iostream>
#include <ctime>
#include <unistd.h>
#include <cstdlib>
using namespace bit;
// 消费线程要做的事情：
void *Consumer(void *argc)
{
    blockQueue<int> *bq = (blockQueue<int> *)argc;
    while (true)
    {
        sleep(2);
        // c.1  拿数据：
        int data = 0;
        bq->pop(&data);

        // c.2  处理数据：
        sleep(1);
        std::cout << "Consumer->get a data " << data << ". Its square number is " << data * data << std::endl;
    }

    return nullptr;
}
// 生产线程要做的事情：
void *Productor(void *argc)
{
    blockQueue<int> *bq = (blockQueue<int> *)argc;
    while (true)
    {
        // p.1  构建数据：
        srand(time(nullptr));
        int data = rand() % 100 + 1; // 随机生成一个1-100的数据；

        // p.2  生产数据：
        bq->push(data);
        std::cout << "Productor->" << data << std::endl;
        sleep(1);
    }

    return nullptr;
}
int main()
{
    blockQueue<int> *bq = new blockQueue<int>();

    // 创建线程：要让两个线程看到同一个阻塞队列：
    pthread_t c, p;
    pthread_create(&c, nullptr, Consumer, (void *)bq);
    pthread_create(&p, nullptr, Productor, (void *)bq);

    // 等待线程：
    pthread_join(c, nullptr);
    pthread_join(p, nullptr);

    delete bq;
    return 0;
}